//	初始化总路由
package routers

import (
	"github.com/gin-gonic/gin"
	ginSwagger "github.com/swaggo/gin-swagger"
	"github.com/swaggo/gin-swagger/swaggerFiles"
	"mycms/middlewares"
)

type Option func(*gin.Engine)

//	加载多个APP的路由配置
var options = []Option{
	WsApiRouters,		//	websocket
	AdminApiRouters,	//	后台管理员
}

// 注册app的路由配置
func Include(opts ...Option) {
	options = append(options, opts...)
}

// 初始化
func Init() *gin.Engine {
	// 加载多个APP的路由配置
	//Include(AdminApiRouters)

	r := gin.New()

	//	TODO Swagger 接口文档路由
	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

	//	使用中间件，Recovery会恢复任何恐慌（panics） logger记录日志  Cors处理跨域  DefaultLimit限制IP访问频率
	r.Use(gin.Recovery(), gin.Logger(), middlewares.Cors(), middlewares.DefaultLimit())
	for _, opt := range options {
		opt(r)
	}
	return r
}
